import path from 'path'
import type { UserConfig, ConfigEnv } from 'vite'
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { VantResolver } from 'unplugin-vue-components/resolvers'
import Voerkai18nPlugin from "@voerkai18n/vite"

// https://vitejs.dev/config/
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
  const NY_ENV = loadEnv(mode, __dirname)
  const isProduction = NY_ENV.VITE_APP_ENV === 'production'
  const isDev = NY_ENV.VITE_APP_ENV === 'development'

  return {
    base: '/',
    publicDir: 'public',
    resolve: {
      alias: {
        '@': path.resolve(__dirname, 'src')
      },
      // 导入时想要省略的扩展名列表
      extensions: [
        '.mjs',
        '.js',
        '.ts',
        '.jsx',
        '.tsx',
        '.json'
      ]
    },
    server: {
      open: false,
      // port: 8091,
      host: '0.0.0.0',
      proxy: {
        "/th": {
          "target": 'https://tsanghi.com/api',
          "changeOrigin": true,
          rewrite: path => path.replace(/^\/th/, '')
        },
        '/api': {
          target: 'http://47.84.79.98',
          changeOrigin: true,
          // rewrite: path => path.replace(/^\/api/, '')
        }
      }
    },
    json: {
      // 是否支持从 .json 文件中进行按名导入
      namedExports: true,
      stringify: false
    },
    build: {
      // 打包构建输出路径，默认 dist
      outDir: 'dist',
      // 生成静态资源的存放路径
      assetsDir: 'static',
      // 设置最终构建的浏览器兼容目标
      target: 'es2015',
      // 此选项允许用户为 CSS 的压缩设置一个不同的浏览器 target
      cssTarget: 'chrome80',
      // 图片转 base64 编码的阈值
      assetsInlineLimit: 4096,
      // 启用/禁用 CSS 代码拆分
      cssCodeSplit: true,
      // 构建后是否生成 source map 文件
      sourcemap: isDev,
      // 当设置为 true，构建后将会生成 manifest.json 文件
      manifest: false,
      // 默认情况下，若 outDir 在 root 目录下，则 Vite 会在构建时清空该目录。
      emptyOutDir: true,
      // chunk 大小警告的限制
      chunkSizeWarningLimit: 500,
      // rollup配置
      rollupOptions: {
        output: {
          // https://rollupjs.org/guide/en/#outputmanualchunks
          manualChunks: {
            'vendor.vuelibs': ['vue', 'vue-router',  'axios']
          }
        }
      }
    },
    esbuild: {
      // 删除 console
      drop: isProduction ? ['console', 'debugger'] : []
    },
    plugins: [
      vue(),
      vueJsx(),
      Components({
        // 组件的有效文件扩展名
        extensions: ['vue'],
        // 搜索子目录
        deep: false,
        // 生成“components.d.ts”全局声明，
        dts: 'types/components.d.ts',
        // 允许子目录作为组件的命名空间前缀。
        directoryAsNamespace: true,
        // 忽略命名空间前缀的子目录路径
        globalNamespaces: [],
        // auto import for directives
        directives: true,
        // 解析前转换路径
        importPathTransform: (v) => v,
        // 允许组件替代具有相同名称的其他组件
        allowOverrides: false,
        include: [/\.vue$/, /\.vue\?vue/],
        exclude: [/[\\/]node_modules[\\/]/, /[\\/]\.git[\\/]/],
        resolvers: [VantResolver()]
      }),
      AutoImport({
        dts: 'types/auto-imports.d.ts',
        include: [
          /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
          /\.vue$/,
          /\.vue\?vue/, // .vue
          /\.md$/ // .md
        ],
        imports: ['vue']
      }),
      Voerkai18nPlugin({
        location: "./",                                   
        autoImport: true,                              // 仅在js文件中自动导入t函数
        debug:true,    
      })
    ],
    css: {
      // sass预处理
      preprocessorOptions: {
        scss: {
          additionalData: `@import "@/assets/sass/variable.scss";`
        }
      }
    }
  }
})

// voerkai18n translate --appkey 2dZdBC4XT58eQSFnFx0T  --appid 20200812000540635